import java.util.*;

public class Test3 {
    private boolean[] visited;

    public int citys(ArrayList<ArrayList<Integer>> m) {
        int n = m.size();
        visited = new boolean[n];
        int count = 0;

        for (int i = 0; i < n; i++) {
            if (!visited[i]) {
                dfs(m, i);
                count++;
            }
        }
        return count;
    }

    private void dfs(ArrayList<ArrayList<Integer>> m, int i) {
        visited[i] = true;
        for (int j = 0; j < m.size(); j++) {
            if (m.get(i).get(j) == 1 && !visited[j]) {
                dfs(m, j);
            }
        }
    }

    public static void main(String[] args) {
        Test3 t = new Test3();
        ArrayList<ArrayList<Integer>> m = new ArrayList<>();
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(1);
        list.add(0);
        m.add(list);
        ArrayList<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(1);
        list1.add(0);
        m.add(list1);
        ArrayList<Integer> list2 = new ArrayList<>();
        list2.add(0);
        list2.add(0);
        list2.add(1);
        m.add(list2);
        System.out.println(t.citys(m));
    }
}
